package model

import (
	"fmt"
	"log"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"

	"hrms-api/config"
)

var DB *gorm.DB

// InitDB 初始化数据库连接
func InitDB(cfg *config.Config) error {
	// 构建DSN
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=%t&loc=%s",
		cfg.Database.Username,
		cfg.Database.Password,
		cfg.Database.Host,
		cfg.Database.Port,
		cfg.Database.DBName,
		cfg.Database.Charset,
		cfg.Database.ParseTime,
		cfg.Database.Loc,
	)

	// 连接数据库
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		return fmt.Errorf("连接数据库失败: %v", err)
	}

	// 设置全局DB变量
	DB = db

	// 自动迁移数据库表
	if err := autoMigrate(); err != nil {
		return fmt.Errorf("自动迁移数据库表失败: %v", err)
	}

	log.Println("数据库初始化成功")
	return nil
}

// autoMigrate 自动迁移数据库表
func autoMigrate() error {
	return DB.AutoMigrate(
		&User{},        // 用户表
		&Employee{},    // 员工表
		&Candidate{},   // 应聘者表
		&Department{},  // 部门表
		&Attendance{},  // 考勤表
		&Salary{},      // 薪资表
		&Recruitment{}, // 招聘表
		&Position{},    // 职位表
		&Training{},    // 培训表
		&Role{},        // 角色表
		&UserRole{},    // 用户角色表
		&Notice{},      // 公告表(等同于announcement)
		&Interview{},   // 面试表
		&Resume{},      // 简历表
	)
}
